"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Modification du niveau de journalisation d'exécution à l'aide de Golang et GoFr

Modification du niveau de journalisation d'exécution à l'aide de Golang et GoFr

Publié le 2024-07-30
Parcourir:613

Dans cet article, je vais vous expliquer comment modifier le niveau de journalisation de votre application sans redémarrer votre application.

Introduction

Les niveaux de journalisation sont généralement considérés par ordre d'importance : activez les niveaux "sans importance" dans le développement (avis, débogage, etc.), mais activez uniquement les niveaux "les plus importants" (avertissement, erreur, etc.) dans production, où les ressources comme le temps CPU et l'espace disque sont précieuses.

Mais que se passe-t-il si votre application s'exécute au niveau ERREUR et que vous commencez à rencontrer de nombreux problèmes, mais que vous ne parvenez pas à les comprendre à partir des journaux de niveau ERREUR, modifier le niveau de journalisation en redéployant l'application prendra beaucoup de temps et de ressources.

De plus, l'exécution de votre application au niveau INFO ou DEBUG en production générera un grand nombre de journaux qui peuvent submerger le système de journalisation, entraînant une augmentation des opérations d'E/S et de la consommation de ressources.

Pour nous sauver de ces problèmes, GoFr - The Ultimate Golang Framework fournit un moyen sécurisé de modifier le niveau de journalisation sans redémarrer votre application.

Modification du niveau de journalisation

Pour modifier le niveau de journalisation, toute application GoFr nécessite la configuration suivante :

REMOTE_LOG_URL= (e.g., https://log-service.com/log-levels?id=1)

GoFr récupère le point de terminaison fourni toutes les 15 secondes par défaut pour obtenir le dernier niveau de journalisation, cet intervalle peut être augmenté ou diminué en ajoutant la configuration suivante.

REMOTE_LOG_FETCH_INTERVAL= (default: 15)

Service de niveau de journalisation

GoFr requiert la réponse de l'URL au format suivant avec deux champs obligatoires :

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}

Créons le service de niveau journal qui fournira le niveau de journalisation à notre application.

J'utiliserai GoFr pour créer le service, reportez-vous à la documentation pour en savoir plus.

Nous utiliserons MySQL comme base de données. Pour ajouter MySQL, ajoutez les configurations suivantes dans le fichier .env dans le répertoire des configurations.

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=log-level
DB_PORT=2001
DB_DIALECT=mysql

Pour exécuter le conteneur Docker MySQL, exécutez la commande suivante

docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30

Ajoutons le fichier main.go avec les migrations pour créer une table et nous utiliserons la fonctionnalité AddRESTHandler pour enregistrer la route.

main.go

package main

import (
 "gofr.dev/pkg/gofr"
 "gofr.dev/pkg/gofr/migration"
)

const createTable = `CREATE TABLE level (
    id INT PRIMARY KEY,
    service_name VARCHAR(255) NOT NULL,
    log_level VARCHAR(50) NOT NULL
);
`

func createTableLevel() migration.Migrate {
 return migration.Migrate{
  UP: func(d migration.Datasource) error {
   _, err := d.SQL.Exec(createTable)
   if err != nil {
    return err
   }

   return nil
  },
 }
}

type Level struct {
 ID          int    `json:"id"`
 ServiceName string `json:"serviceName"`
 LogLevel    string `json:"logLevel"`
}

func (u *Level) RestPath() string {
 return "level"
}

func main() {
 app := gofr.New()

 app.Migrate(map[int64]migration.Migrate{1: createTableLevel()})

 err := app.AddRESTHandlers(&Level{})
 if err != nil {
  app.Logger().Fatalf("Failed to register routes for level struct: %v", err)
 }

 app.Run()
}

Après avoir exécuté le service de journalisation, nous verrons les journaux suivants :

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

Nous avons toutes les routes REST enregistrées.

Pour créer un service, envoyez la demande suivante :

curl --location 'localhost:8000/level' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"INFO",
    "serviceName":"gofr-app"
}'

Pour mettre à jour le niveau de journalisation, envoyez la demande suivante :

curl --location --request PUT 'localhost:8000/level/1' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"DEBUG",
    "serviceName":"gofr-app"
}'

Pour obtenir le niveau de journalisation, envoyez la requête suivante :

curl --location 'localhost:8000/level/1'

La même URL sera utilisée dans les configurations de notre application dont le niveau de log doit être modifié à distance.

CONCLUSION

En utilisant la fonction de modification du niveau de journalisation à distance du GoFr, vous bénéficierez d'avantages tels que :

  • Ajustements sans effort :
    Modifiez le niveau de journalisation à tout moment sans redémarrer l'application. Ceci est particulièrement utile lors du dépannage.

  • Visibilité améliorée :
    Passez facilement à un niveau de journalisation plus détaillé (par exemple, DEBUG) pour obtenir des informations plus approfondies sur des problèmes spécifiques, puis revenez à un niveau moins détaillé (par exemple, INFO) pour un fonctionnement régulier.

  • Performance améliorée:
    La génération d'un grand nombre de journaux peut surcharger le système de journalisation, entraînant une augmentation des opérations d'E/S et de la consommation de ressources, le passage au niveau d'avertissement ou d'erreur réduit le nombre de journaux et améliore les performances, et RÉDUCTION DU COÛT DU CLOUD.

Soutenez GoFr en donnant une ⭐étoile : https://github.com/gofr-dev/gofr

De plus, vous avez accès au point de terminaison public gratuit pour exporter et visualiser les traces de votre application @ tracer.gofr.dev. 
Pour l'activer, ajoutez la configuration suivante dans votre fichier .env

TRACE_EXPORTER=gofr

Autres bénéfices:
Si vous contribuez au GOFR soit par le développement, soit par la rédaction d'articles. Vous pouvez obtenir gratuitement des swags (T-shirts, autocollants) en remplissant le formulaire présenté sur leur GitHub Lisezmoi (en bas).

Déclaration de sortie Cet article est reproduit sur : https://dev.to/aryanmehrotra/remote-runtime-log-level-change-using-golang-gofr-54d8?1 En cas de violation, veuillez contacter [email protected] pour supprimer il
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3